/** 父子关系的子组件
 * parent可以获得自己的父组件
 * @example
 * ```
 * <parent>
 *   <child />
 *   <child />
 * </parent>
 * ```
 */
export default {
  inject: ["parent"],
  computed: {
    /** 父组件的名字（默认：组件自身name + "-group"，例如ee-radio，父组件就是ee-radio-group） */
    pname() { return this.$options.name + "-group" }
  },
  methods: {
    /** 匹配父组件，默认用pname和父组件的名字进行比较，如果允许有多种父组件，可以重写此方法来匹配 */
    pmatch(p) {
      return p.$options.name == this.pname;
    }
  },
  mounted() {
    if (!this.parent) return;

    while (true) {
      if (this.parent && !this.pmatch(this.parent)) {
        this.parent = this.parent.$parent;
        if (!this.parent)
          break;
      } else {
        break;
      }
    }

    if (this.parent)
      this.parent.children.push(this);
  },
  unmounted() {
    if (this.parent) {
      let index = this.parent.children.indexOf(this);
      if (index != -1)
        this.parent.children.splice(index, 1);
    }
  },
}